//
//  SQLiteManager.swift
//  FMDB使用
//
//  Created by iOS on 16/10/7.
//  Copyright © 2016年 iOS. All rights reserved.
//

import UIKit
import FMDB

/*
 1.打开数据库
 2.创建数据库表
 3.操作数据
 */

/*
 FMDB 3个重要的类:
     1.FMDatabase: 一个FMDatabase就是一个数据库对象,后续所有数据库相关的操作都依赖这个对象
        1.1 executeStatements: 一次可以执行多条SQL语句
        1.2 executeQuery: 执行查询操作
        1.3 executeUpdate: 执行更新操作, 在FMDB中除了查询都称为更新
     2.FMDatabaseQueue:一个FMDatabaseQueue包含一个FMDatabase和一个队列(串行)
         2.1: inDatabase: 不带事务执行sql语句
         2.2: inTransaction: 带事务执行sql语句
     3.FMResultSet: 查询的结果集,查询的结果是包含在FMResultSet里面
 */

class HMSQLiteManager: NSObject {
    static let shared: HMSQLiteManager = HMSQLiteManager()
    
    let dbQueue: FMDatabaseQueue
    
    private override init() {
        let dbPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).last! + "/statuses.sqlite"
        print("dbPath: \(dbPath)")
        // path: String!: 数据库路径
        // FMDatabaseQueue: 在创建的时候会自动帮我们打开数据库
        dbQueue = FMDatabaseQueue(path: dbPath)
        
        super.init()
        
        createTabel()
    }
    
    private func createTabel() {
        // sql
        let tables = Bundle.main.path(forResource: "tables.sql", ofType: nil)
        let sqls = try! String(contentsOfFile: tables!)
        
        dbQueue.inDatabase { (db) in
            do {
                // 一次性执行多条sql语句
                try db?.executeStatements(sqls)
                print("创建表成功")
            } catch let error as NSError {
                print("创建表失败: \(error)")
            }
        }
    }
}
